DEFINITION MODULE MyLongRealConversions;
(*
  Created:   10.02.88 by 
             Stefan Salewski
             Stolper Weg 3
             2160 Stade   West-Germany
             Tel: 04141/61130
             
  Note: compiled with AMIGA Modula-2 System by AMSoft
   
  This Module may be freely copied. But please
  leave my name in. Thanks....Stefan 
*)

  VAR fillChar:CHAR; (* normalerweise=Leerzeichen, aber beliebig veraenderbar*)
  
  PROCEDURE StrToReal(str:ARRAY OF CHAR;VAR x:LONGREAL;VAR error:BOOLEAN);
  (* Wandelt einen String in eine LongRealZahl um.
     Ziffer::=('0'|'1'|'2'|'3'|'4'|'5'|'6'|'7'|'8'|'9')
     Exponent::=('E' ['+'|'-'] Ziffer [Ziffer | Ziffer Ziffer ])
     str ::={fillChar}['-'|'+'] Ziffer {Ziffer} ['.' Ziffer] {Ziffer} [Exonent]
  
    Wenn str obiges Format hat, ist error= FALSE. x wird bei einem
    Fehler nicht auf Null gesetzt, und kann trotz des Fehlers verwendet werden
    Beispiel: str='   123.-34E12'   ==> x=123.0
              str='-123.81E23g'     ==>x=-123.81E23
  *)            
              
  PROCEDURE RealToStr(x:LONGREAL;VAR str:ARRAY OF CHAR;m,n:INTEGER);
  (* ABS(m) gibt die Anzahl der gueltigen Ziffern an,ABS(n) die Nachkommastellen.
     n ist eingeschraenkt durch m, m wiederum durch HIGH(str).
     Es sollte gelten: ABS(n) < ABS(m) < HIGH(str).
     Ist m negativ, so wird die Zahl linksbuendig, sonst rechtsbuendig in
     str eingetragen. Ist n negativ, so wird Exponetialdarstellung verwendet.
     Der String muss mindesten 10 Zeichen gross sein (-n.mE+abc), sonst
     bricht das Programm ab.
     Ist die Zahl in normaler Notation  zu gross fuer str, so wird die
     Exponentialdarstellung  gewaehlt.
     Beispiel:HIGH(str)=9
     x:=-123.456789 m= 6 n=2   ==> '  -123.45'
     x:=-123.456789 m=-6 n=2   ==> '-123.45  '
     x:=123.456789  m=-6 n=2   ==> ' 123.45  '
     x:=123.456789  m=6  n=-2  ==> ' 1.2E+002'
   *)
   
END MyLongRealConversions.def
